TD 8 : Modélisation
Modélisation
- L3 MIASHS/Ingémath
- Université Paris Cité
- Année 2024-2025
- Course Homepage
- Moodle
L’objectif de cette séance est construire des modèles Entité-Association sur des problèmes miniatures.
Modélisation Entité-Association (E/A ou E/R)
Exercice (Supermarché)
Produire un schéma E/R qui décrit des informations concernant les produits d’un supermarché.
Chaque produit a un nom et un prix et appartient à une catégorie.
Le supermarché a plusieurs rayons, un rayon étant caractérisé par un étage et un numéro de rangée. On veut maintenir l’emplacement des produits dans les rayons. Les produits d’une même catégorie sont placés dans le même rayon, mais un rayon peut contenir des produits de plusieurs catégories.
Traduire le schéma EA dans le formalisme des pattes de corbeau
Définir le schéma relationnel correspondant en SQL
Exercice (Location de voitures)
Produire un schéma E/R qui décrit des informations concernant des voitures à louer.
Chaque voiture a une plaque d’immatriculation, une couleur et une marque. Le prix de la location dépend de la catégorie, où chaque catégorie est identifiée par un nom.
Pas d’entités faibles car chaque entité a son propre identifiant.
À discuter : pourrait-on utiliser un lien est-un ( ◃ ) pour modéliser le fait qu’un véhicule relève d’une catégorie ?
Modifier ensuite le schéma pour représenter les modèles de voitures.
Un modèle a un nom, une marque et un nombre de sièges.
Toutes les voitures du même modèle doivent appartenir à la même catégorie de prix.
De plus, on veut distinguer les voitures disponibles des voitures en location. Pour les voitures disponibles on représente l’emplacement. Pour les voitures en location on représente la date et la durée de la location, ainsi que le nom du client.
On utilise ici les liens Est Un pour décrire le statut des voitures (spécialisation).
Il faudrait ajouter une contrainte d’exclusion totale : une voiture est soit en location, soit disponible.
On pourrait aussi passer par des attributs statut, emplacement et une entité faible Location.
Traduire le schéma EA dans le formalisme des pattes de corbeau
erDiagram
VOITURE
MODELE
CATEGORIE
MARQUE
LOCATION
MODELE ||..o{ VOITURE : "releve de"
VOITURE {
string immatriculation PK
string couleur
boolean disponible
string emplacement
string nom_modele FK
}
MARQUE ||..o{ MODELE : "fabrique par"
MODELE {
string nom PK
integer nombre_de_sieges
string nom_marque FK
string nom_categorie FK
}
MARQUE {
string nom PK
}
CATEGORIE ||..o{ MODELE : "appartient a"
CATEGORIE {
string nom PK
numeric prix_location
}
LOCATION |o--|| VOITURE : concerne
LOCATION {
string date
integer immatriculation PK, FK
string duree
integer numero_client
}
Contraintes externes:
- Dans
VOITURE,disponiblesi et seulement siemplacementestNOT NULL - Dans
VOITUREetLOCATION,NOT disponiblesi et seulement si dansLOCATION, il existe une instance qui réfère à l’instance deVOITURE.
Trouver une meilleure modélisation pour la spécialisation DISPONIBLE/EN LOCATION.
Définir le schéma relationnel correspondant en SQL
CREATE SCHEMA IF NOT EXISTS schema_avis;
CREATE TABLE schema_avis.categorie (
nom text NOT NULL ,
prix_location numeric ,
CONSTRAINT pk_categorie PRIMARY KEY ( nom )
);
CREATE TABLE schema_avis.marque (
nom text NOT NULL ,
CONSTRAINT pk_marque PRIMARY KEY ( nom )
);
CREATE TABLE schema_avis.modele (
nom text NOT NULL ,
nombre_sieges bigint ,
nom_marque text ,
name_categorie text ,
CONSTRAINT pk_modele PRIMARY KEY ( nom )
);CREATE TABLE schema_avis.voiture (
immatriculation bigint NOT NULL ,
name_modele text ,
couleur text ,
disponible boolean NOT NULL ,
emplacement text ,
CONSTRAINT pk_voiture PRIMARY KEY ( immatriculation )
);
CREATE TABLE schema_avis.location (
immatriculation bigint NOT NULL ,
"date" date NOT NULL ,
duree bigint NOT NULL ,
numero_client bigint NOT NULL ,
CONSTRAINT pk_location PRIMARY KEY ( immatriculation )
);
ALTER TABLE schema_avis.location
ADD CONSTRAINT
fk_location_voiture
FOREIGN KEY ( immatriculation )
REFERENCES schema_avis.voiture( immatriculation );
ALTER TABLE schema_avis.modele
ADD CONSTRAINT
fk_modele_marque
FOREIGN KEY ( nom_marque )
REFERENCES schema_avis.marque( nom )
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE schema_avis.modele
ADD CONSTRAINT
fk_modele_categorie
FOREIGN KEY ( name_categorie )
REFERENCES schema_avis.categorie( nom );
ALTER TABLE schema_avis.voiture
ADD CONSTRAINT
fk_voiture_modele
FOREIGN KEY ( name_modele )
REFERENCES schema_avis.modele( nom )
ON DELETE CASCADE ON UPDATE CASCADE;Exercice (Gestion du personnel d’une entreprise)
Dans une entreprise, chaque employé (identifié par un numéro) est attaché à un département de l’entreprise. Il occupe un bureau et participe à un ou plusieurs projets développés par l’entreprise.
De chaque employé, on connait : le nom, le prénom, les emplois qu’il a occupés à différentes dates et les salaires qu’il a perçus dans ces emplois.
Chaque département est identifié par un numéro, a son budget propre et est dirigé par un directeur faisant partie du personnel de l’entreprise.
Chaque bureau est identifié par un numéro, est rattaché à un département et est caractérisé par sa surface en mètres carrés. Il possède un numéro de téléphone associé.
Chaque projet est identifié par un numéro, possède un certain budget et emploie plusieurs personnes appartenant à différents départements. Chaque employé est affecté pour un certain nombre d’heures à un projet.
Donner un modèle entité-association correspondant à la description ci-dessus.
Modifier votre modélisation pour tenir compte de l’évolution dans le temps de la vie de l’entreprise : les projets ont des durées de vie limitées, chaque employé est affecté à un projet (mais aussi un département) pendant une certaines durée, etc
Traduire le schéma EA dans le formalisme des pattes de corbeau
Définir le schéma relationnel correspondant en SQL